<%

'** WBGraph 0.4 ( 2006/08/04 )
'** Simone Cingano (imente) Copyright 2006

Class Class_graph

	private graphArray()
	
	public direction, showLabels, showIndicators, lines, length, indicators
	private barStyle(4,5)
		
	public sub init()
		call reset()
	end sub
	
	public sub reset()
		redim graphArray(5,0)
		showLabels = false
		showIndicators = true
		lines = 2
		length = 300
		indicators = 10
		barStyle(0,0) = "#26426C" : barStyle(1,0) = "#4F7DC0" : barStyle(2,0) = "#88A7D5" : barStyle(3,0) = "#B8CBE7" : barStyle(4,0) = "#EEF2F9"
		
		barStyle(0,3) = "#26426C" : barStyle(1,3) = "#4F7DC0" : barStyle(2,3) = "#88A7D5" : barStyle(3,3) = "#B8CBE7" : barStyle(4,2) = "#EEF2F9"
		barStyle(0,4) = "#26426C" : barStyle(1,4) = "#4F7DC0" : barStyle(2,4) = "#88A7D5" : barStyle(3,4) = "#B8CBE7" : barStyle(4,3) = "#EEF2F9"
		
		barStyle(0,1) = 10 : barStyle(1,1) = 10 : barStyle(2,1) = 10 : barStyle(3,1) = 10 : barStyle(4,1) = 10
		barStyle(0,2) = "" : barStyle(1,2) = "" : barStyle(2,2) = "" : barStyle(3,2) = "" : barStyle(4,2) = ""
	end sub
	
	public sub clearValues()
		redim graphArray(5,0)
	end sub
	
	public sub setStyle(argBar, argType, argValue)
		dim numType
		
		select case argType
			case "barColor"
			numType = 0
			case "barThickness"
			numType = 1
			case "barBackgroundImage"
			numType = 2
			case "barLeftBorderColor"
			numType = 3
			case "barRightBorderColor"
			numType = 4
		end select
		
		if cint(argBar) <= 0 then
			barStyle(0,numType) = argValue
			barStyle(1,numType) = argValue
			barStyle(2,numType) = argValue
			barStyle(3,numType) = argValue
			barStyle(4,numType) = argValue
		elseif cint(argBar) <=5 then
			barStyle(cint(argBar)-1,numType) = argValue
		end if
		
	end sub
	
	public sub addValue(argVal0, argVal1, argVal2, argVal3, argVal4, argVal5)
	
		redim preserve graphArray(5,ubound(graphArray,2)+1)
		graphArray(0,ubound(graphArray,2)) = argVal0
		graphArray(1,ubound(graphArray,2)) = argVal1
		graphArray(2,ubound(graphArray,2)) = argVal2
		graphArray(3,ubound(graphArray,2)) = argVal3
		graphArray(4,ubound(graphArray,2)) = argVal4
		graphArray(5,ubound(graphArray,2)) = argVal5
	
	end sub
	
	public function getMaxValue()
	
		dim tmpMaxValue
		tmpMaxValue = clng(1)
		dim ii, jj
		
		for ii = 1 to ubound(graphArray,2)
			for jj = 1 to lines
				if clng(graphArray(jj,ii)) > clng(tmpMaxValue) then tmpMaxValue = clng(graphArray(jj,ii))
			next
		next
		
		getMaxValue = tmpMaxValue
	
	end function
	
	public sub printGraph()
	
		dim ii, jj
		dim maxValue, finalValue
		
		maxValue = getMaxValue()
		if indicators > maxValue then indicators = maxValue
		
		if direction = "vertical" then %>
			<table class="gv-box"><tr><%
			if showIndicators = true then %>
			<td style="padding:0;">
			<% for jj = 1 to indicators
					%><div class="gv-ind" style="height:<%=int(clng(length)/clng(indicators))-1%>px;"><%=formatNumericValue(int((clng(maxValue)/clng(indicators))*(indicators - jj + 1)))%></div>
				<% next 
			%></td><%
			end if
			
			for ii = 1 to ubound(graphArray,2)%>
			<td class="gv-bar"><%
			for jj = 1 to lines
				finalValue = int((clng(length) * clng(graphArray(jj,ii)))/clng(maxValue))
				if finalValue < 3 then finalValue = 3
				%><div class="gv-bar<%=jj%>" style="height:<%=finalValue-1%>px;margin-top:<%=clng(length)-clng(finalValue)%>px;"></div><%
				next
			%></td><%
			next %>
			</tr><%
			if showLabels = true then %>
			<tr><%
			if showIndicators = true then %><td></td><% end if
			for ii = 1 to ubound(graphArray,2)%>
			<td class="gv-txt"><%=graphArray(0,ii)%></td><%
			next %>
			</tr><%
			end if %>
		</table>
		<% 
		else 
		%>
			<table class="gh-box"><%
			for ii = 1 to ubound(graphArray,2) %>
			  <tr><%
			  if showLabels = true then %>
			  <td class="gh-txt"><%=graphArray(0,ii)%></td><%
			  end if %>
				<td class="gh-bar"><%
				for jj = 1 to lines
				finalValue = int((clng(length) * clng(graphArray(jj,ii)))/clng(maxValue))
				if finalValue < 1 then finalValue = 1
				%><div class="gh-bar<%=jj%>" style="width:<%=finalValue-1%>px;"></div>
				<% next
				%></td></tr>
				<% next
				if showIndicators = true then %>
				<tr><% if showLabels = true then %><td></td><% end if %><td style="padding:0;"><%
					for jj = 1 to indicators
						%><div class="gh-ind" style="width:<%=int(clng(length)/clng(indicators))-1%>px;"><%=formatNumericValue(int((clng(maxValue)/clng(indicators))*(jj)))%>&nbsp;</div><%
					next  
				%></td></tr><%
				end if %>
			</table>
			<%
		end if
		
	end sub
	
	public sub printStyle()
	%>
<style type="text/css">
	table.gv-box { border-collapse:collapse; margin:20px auto; padding:0; }
	table.gv-box td { border-right:1px dotted #999999; vertical-align:middle; }
	td.gv-bar { border-left:1px dotted #999999; padding:0 5px;}
	div.gv-bar1, div.gv-bar2, div.gv-bar3, div.gv-bar4, div.gv-bar5 { float:left; font-size:0; }
	div.gv-bar1 { background-color:<%=barStyle(0,0)%>;width:<%=barStyle(0,1)%>px;border-left:1px solid <%=barStyle(0,3)%>;border-right:1px solid <%=barStyle(0,4)%>;border-top:1px solid <%=barStyle(0,3)%>;<% if barStyle(0,2) <> "" then %>background:url('<%=barStyle(0,2)%>') repeat-y left bottom;<% end if %> }
	div.gv-bar2 { background-color:<%=barStyle(1,0)%>;width:<%=barStyle(1,1)%>px;border-left:1px solid <%=barStyle(1,3)%>;border-right:1px solid <%=barStyle(1,4)%>;border-top:1px solid <%=barStyle(1,3)%>;<% if barStyle(1,2) <> "" then %>background:url('<%=barStyle(1,2)%>') repeat-y left bottom;<% end if %> }
	div.gv-bar3 { background-color:<%=barStyle(2,0)%>;width:<%=barStyle(2,1)%>px;border-left:1px solid <%=barStyle(2,3)%>;border-right:1px solid <%=barStyle(2,4)%>;border-top:1px solid <%=barStyle(2,3)%>;<% if barStyle(2,2) <> "" then %>background:url('<%=barStyle(2,2)%>') repeat-y left bottom;<% end if %> }
	div.gv-bar4 { background-color:<%=barStyle(3,0)%>;width:<%=barStyle(3,1)%>px;border-left:1px solid <%=barStyle(3,3)%>;border-right:1px solid <%=barStyle(3,4)%>;border-top:1px solid <%=barStyle(3,3)%>;<% if barStyle(3,2) <> "" then %>background:url('<%=barStyle(3,2)%>') repeat-y left bottom;<% end if %> }
	div.gv-bar5 { background-color:<%=barStyle(4,0)%>;width:<%=barStyle(4,1)%>px;border-left:1px solid <%=barStyle(4,3)%>;border-right:1px solid <%=barStyle(4,4)%>;border-top:1px solid <%=barStyle(4,3)%>;<% if barStyle(4,2) <> "" then %>background:url('<%=barStyle(4,2)%>') repeat-y left bottom;<% end if %> }
	td.gv-bar { border-bottom:1px solid #666666; }
	td.gv-txt { text-align:center; font-size:10px; padding:5px; }
	div.gv-ind { border-top:1px solid #999; font-size:10px; text-align:left; padding-right:5px; }
	
	table.gh-box { border-collapse:collapse; padding:0; margin:20px auto; }
	table.gh-box td { border-top:1px dotted #999999; vertical-align:middle; }
	div.gh-bar1, div.gh-bar2, div.gh-bar3, div.gh-bar4, div.gh-bar5 { font-size:0; }
	div.gh-bar1 { background-color:<%=barStyle(0,0)%>;height:<%=barStyle(0,1)%>px;border-top:1px solid <%=barStyle(0,3)%>;border-bottom:1px solid <%=barStyle(0,4)%>;border-right:1px solid <%=barStyle(0,4)%>;<% if barStyle(0,2) <> "" then %>background:url('<%=barStyle(0,2)%>') repeat-x left bottom;<% end if %> }
	div.gh-bar2 { background-color:<%=barStyle(1,0)%>;height:<%=barStyle(1,1)%>px;border-top:1px solid <%=barStyle(1,3)%>;border-bottom:1px solid <%=barStyle(1,4)%>;border-right:1px solid <%=barStyle(1,4)%>;<% if barStyle(1,2) <> "" then %>background:url('<%=barStyle(1,2)%>') repeat-x left bottom;<% end if %> }
	div.gh-bar3 { background-color:<%=barStyle(2,0)%>;height:<%=barStyle(2,1)%>px;border-top:1px solid <%=barStyle(2,3)%>;border-bottom:1px solid <%=barStyle(2,4)%>;border-right:1px solid <%=barStyle(2,4)%>;<% if barStyle(2,2) <> "" then %>background:url('<%=barStyle(2,2)%>') repeat-x left bottom;<% end if %> }
	div.gh-bar4 { background-color:<%=barStyle(3,0)%>;height:<%=barStyle(3,1)%>px;border-top:1px solid <%=barStyle(3,3)%>;border-bottom:1px solid <%=barStyle(3,4)%>;border-right:1px solid <%=barStyle(3,4)%>;<% if barStyle(3,2) <> "" then %>background:url('<%=barStyle(3,2)%>') repeat-x left bottom;<% end if %> }
	div.gh-bar5 { background-color:<%=barStyle(4,0)%>;height:<%=barStyle(4,1)%>px;border-top:1px solid <%=barStyle(4,3)%>;border-bottom:1px solid <%=barStyle(4,4)%>;border-right:1px solid <%=barStyle(4,4)%>;<% if barStyle(4,2) <> "" then %>background:url('<%=barStyle(4,2)%>') repeat-x left bottom;<% end if %> }
	td.gh-bar { padding:5px 0; border-left:1px solid #666; }
	td.gh-txt { text-align:right; font-size:0.8em; padding:10px; }
	div.gh-ind { float:left; border-right:1px solid #999; font-size:0.6em; text-align:right; padding-top:5px; }
</style>
	<%
	
	end sub
	
	function formatNumericValue(argValue)
		dim ii, output
		argValue = cstr(argValue)
		output = ""
		for ii = 0 to len(argValue)-1
			if (ii mod 3) = 0 and ii <> 0 then output = "." & output
			output = mid(argValue,len(argValue)-ii,1) & output
		next
		formatNumericValue = output
	end function
	
end class
%>